Programming assignment in-class Demo date: Feb/27 starting from 9:30pm at CIS 2084. You have a demo time of 5 minutes and you must pass all test cases within this time window.
(a) Write a Java class to implement a single round of DES. It should take in a 64 bit (8 byte) input, and a 48 bit (6 byte) subkey. It should implement the interface IDESRound. It will complete the DES algorithm from DES.java. The only other requirements concerning the class are 1) it must be written on your own with no assistance from persons other than the professor or the TA, and 2) it must be clear how the code works when read, which can be accomplished through any combination of variable and function names, comments, and code structure that you wish. You will also need to modify TestDES.java to instantiate your class. The modification is very straightforward. All you need to do is to add the constructor for your class on the line marked "/* Insert Constructor Here */". No additional modifications to the test harness are required. You are allowed to modify the test harness only in the marked regions. In doing so, you must be certain that you do not change the function of it. It is recommended that if you wish to extend the test harness for your own tests, you make a copy which you use for your own purposes and do not hand in. You may use any of the helper functions from DES.java and it also contains static arrays with the indices needed for both the P-Boxes and the S-Boxes. You may either use these or provide your own structures.
Turn in:
Both .java and .class files for your single round class, TestDES, and any helper classes which you may have written. You do not need to turn in DES.java or DES.class.
DES.java
destest.input
IDESRound.java
TestDES.java
(b) Write a C/C++ program to implement a single round of DES. Your implementation should be based on Figure 3-6, page 70, textbook. Your program should take in a 64 bit (8 byte) input block, and a 48 bit (6 byte) subkey. Your codes must be written on your own with no assistance from persons other than the professor or the TA, and it must be clear how the code works when read, which can be accomplished through any combination of variable and function names, comments, and code structure that you wish. Your codes must pass the test cases given below.
Input |
Key |
Output |
5b8ec873bf43a652 |
eb57c5e9bf1d |
bf43a65287a8d09c |
87a8d09c67aeeeaa |
ef48f89bff66 |
67aeeeaa931f12a1 |
931f12a1356f5a3e |
1e3f1bd96cd7 |
356f5a3e4a6556fd |
The follow static array provides S-Boxes tables. You may either use it or provide your own structures.
int[][][] SBoxContents =
{ { { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 },
{ 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 },
{ 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 },
{ 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 }, },
{ { 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 },
{ 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 },
{ 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 },
{ 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 }, },
{ { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 },
{ 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 },
{ 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 },
{ 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 }, },
{ { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 },
{ 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 },
{ 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 },
{ 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 }, },
{ { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 },
{ 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 },
{ 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 },
{ 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 }, },
{ { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 },
{ 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 },
{ 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 },
{ 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 }, },
{ { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 },
{ 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 },
{ 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 },
{ 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 }, },
{ { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 },
{ 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 },
{ 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 },
{ 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 }, }, };
Turn in:
The source code files for your single DES round program